package cn.com.landsky.alarm.mapper;

import cn.com.landsky.alarm.common.base.BaseEntity;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/***
 ** @category 基类Dao (所有Dao接口都需要继承该BaseDao接口)
 ** @author qing.yunhui
 ** @email: 280672161@qq.com
 ** @createTime: 2018年5月23日上午10:04:27
 **/
@Mapper
@Repository
public interface BaseMapper<MODEL extends BaseEntity<KEY>,KEY>{

	/**
	 * <p>新增</p>
	 * @param model 待操作的对象
	 * @return int 受影响的行数
	 * **/
	int insert(MODEL model);

	/**
	 * <p>批量新增</p>
	 * @param models 待操作的对象集合
	 * @return int 受影响的行数
	 * */
	int insertBatch(List<MODEL> models);

	/**
	 * <p>更新</p>
	 * @param model(必须包含主键) 待操作的对象
	 * @return int 受影响的行数
	 * */
	int update(MODEL model);

	/**
	 * <p>根据给定id删除(逻辑删除)</p>
	 * @param id
	 * @return int 受影响的行数
	 * */
	int delete(KEY id);

	/**
	 * <p>根据给定ids列表删除(逻辑删除)</p>
	 * @param ids
	 * @return int 受影响的行数
	 * */
	int deleteBatch(List<KEY> ids);

	/**
	 * <p>根据给定id查询对应model</p>
	 * @param id
	 * @return Model
	 * */
	MODEL getById(KEY id);

	/**
	 * <p>根据给定条件统计符合条件的记录条数</p>
	 * @param map 待查询的条件
	 * */
	int queryCount(Map<String, Object> map);

	/**
	 * <p>根据给定参数查询符合条件的记录集</p>
	 * @param map
	 * @return List<Model>
	 * */
	List<MODEL> query(Map<String, Object> map);

}
